package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberIdVO;
import com.ssy.lingxi.member.merchant.model.vo.platform.request.*;
import com.ssy.lingxi.member.merchant.model.vo.platform.response.*;
import org.springframework.http.HttpHeaders;

import javax.validation.Valid;
import java.util.List;

/**
 * 平台后台 - 会员角色规则配置相关接口
 *
 * @author whm
 * @version 2.0.0
 * @date 2022-03-10
 **/
public interface IPlatformMemberRoleRuleService {
    /**
     * 根据名称，模糊、分页查询会员列表
     *
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageVO>> pageMembers(PageMemberByNameVO pageVO);

    /**
     * 根据名称，模糊、分页查询会员管理列表
     *
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberRoleRuleVO>> pageRuleMembers(PageMemberByNameVO pageVO);

    /**
     * 根据名称，模糊、分页查询角色详情列表
     *
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RoleRuleManageVO>> pageRoles(PageRoleRuleVO pageVO);

    /**
     * 查询当前会员适用角色详情列表
     *
     * @param id 接口参数
     * @return 查询结果
     */
    Wrapper<List<RoleRuleManageVO>> memberRoles(Long id);

    /**
     * 查询下级会员适用角色详情列表
     *
     * @param id 接口参数
     * @return 查询结果
     */
    Wrapper<List<RoleRuleManageVO>> subMemberRoles(Long id);

    /**
     * 查询下级会员适用角色详情列表(注册)
     *
     * @param id 接口参数
     * @return 查询结果
     */
    Wrapper<List<RoleRuleRegisterVO>> subMemberRolesRegister(Long id);

    /**
     * 选择会员
     *
     * @param headers    Http头部信息
     * @param memberIdVO 接口参数
     */
    Wrapper<MemberSelectVO> selectMember(HttpHeaders headers, MemberIdVO memberIdVO);

    /**
     * 新增会员适用角色
     *
     * @param headers    Http头部信息
     * @param roleRuleVO 接口参数
     */
    Wrapper<Void> addRuleRoles(HttpHeaders headers, AddRoleRuleVO roleRuleVO);

    /**
     * 删除会员适用角色
     *
     * @param headers    Http头部信息
     * @param roleRuleVO 接口参数
     */
    Wrapper<Void> delRuleRoles(HttpHeaders headers, @Valid DelRoleRuleVO roleRuleVO);

    /**
     * 会员适用角色详情列表
     *
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberRoleRuleDetailVO> getDetails(@Valid MemberDetailByIdVO idVO);
}
